package com.sunday.common.sharding.sphere.jdbc.leaf.algorithm.sharding.interval;

import com.sunday.common.core.gson.GsonUtils;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

/**
 * 界限
 *
 * @param unit   单位
 * @param amount 时间间隔
 * @author zsy
 * @since 2023/3/30
 */
public record Bound(ChronoUnit unit, int amount) {

    /**
     * 返回此日期-时间的副本，减去指定的数量。
     *
     * @param dateTime
     * @return {@link LocalDateTime}
     */
    public LocalDateTime minus(LocalDateTime dateTime) {
        return dateTime.minus(this.amount, this.unit);
    }

    /**
     * 返回此日期-时间的副本，并添加了指定的数量。
     *
     * @param dateTime
     * @return {@link LocalDateTime}
     */
    public LocalDateTime plus(LocalDateTime dateTime) {
        return dateTime.plus(this.amount, this.unit);
    }

    public static Bound of(ChronoUnit unit, int amount) {
        return new Bound(unit, amount);
    }

    @Override
    public String toString() {
        return GsonUtils.DEFAULT.toJson(this);
    }

}
